const mongoose = require('./db')

//账号；子账号
const LoginSchema = new mongoose.Schema({
    username: String,
    password: String,
    mobile:String,
    level:{
        type:Number,
        default:2
    },
    loginTime:Date,
    newTime:Date,
    status:{
        type:Boolean,
        default:true
    },
    standing:{
        type:mongoose.Types.ObjectId,
        ref:'standing',
        default:null
    },
    uid:{
        type:mongoose.Types.ObjectId,
        ref:'login'
    },
    authentication:{
        type:mongoose.Types.ObjectId,
        ref:'authentication',
        default:null
    }
})

//实名认证
const authenticationSchema=new mongoose.Schema({
  name:String,
  documentType:{
      type:String,
      default:'居民身份证'
  },
  idNumber:{
      type:String,
      default:''
  },
  frontImg:{
      type:String,
      default:''
  },
  backImg:{
      type:String,
      default:''
  },
  status:{
      type:Boolean,
      default:true
  }
});
// 创建一个名为 manageList 的 schema
const ManageListSchema = new mongoose.Schema(
  {
    basicInfo: {
      id: Number, // 用户ID
      name: {
        type: String,
        default: "",
      }, // 姓名
      phone: {
        type: String,
        default: "",
      }, // 手机号码
      email: {
        type: String,
        default: "未填写",
      }, // 邮箱
      jobType: {
        type: String,
        default: "",
      }, // 工作类型
      jobPlace: {
        type: String,
        default: "",
      }, // 工作地点
      completedOrders: {
        type: Number,
        default: 0,
      }, // 本月完成订单数
      score: {
        type: Number,
        default: 0,
      }, // 评分
      authentication: {
        type: String,
        default: "未认证",
      }, // 认证状态
      registerTime: {
        type: Date,
        default: Date.now,
      }, // 注册时间
      status: {
        type: String,
        default: "休息中",
      }, // 接单状态
      lockStatus: {
        type: String,
        default: "未锁定",
      }, // 锁定状态
      deposit: {
        type: Number,
        default: 1200,
      }, // 押金
      depositStatus: {
        type: String,
        default: "未缴纳",
      }, // 押金状态
      cloth: {
        type: Boolean,
        default: false,
      }, // 服装
      mealBox: {
        type: Boolean,
        default: false,
      }, // 餐箱
      traffic: {
        type: String,
        default: "未上报",
      }, // 交通工具
      activationTime: {
        type: Date,
        default: Date.now,
      }, // 开通时间
      lastLoginTime: {
        type: Date,
        default: Date.now,
      }, // 最后登录时间
      address: {
        type: Array,
        default: [],
      },
      dusiness: {
        default: [],
      },
      intended_location: {
        default: "",
        type: String, //意向地点
      },
    },
    idNumber:{
        type:String,
        default:''
    },
    frontImg:{
        type:String,
        default:''
    },
    backImg:{
        type:String,
        default:''
    },
    status:{
        type:Boolean,
        default:true
    }
})

//操作日志
const operationSchema=new mongoose.Schema({
    //操作功能
    feature: String,
    //操作日志
    operation: String,
    //IP地址
    address: String,
    //IP归属地
    homePlace: String,
    //操作时间
    newTime: Date
})


//身份表
const standingSchema=new mongoose.Schema({
    //名称
    name:String,
    //身份描述
    description:String,
    newTime:Date,
    //参考身份
    refer:{
        type:String,
        default:null
    },
    //权限
    authority:{
        type:[mongoose.Types.ObjectId],
        ref:'authority',
        default:[]
    }
})

//权限表
const authoritySchema=new mongoose.Schema({
    name:String,
    level:Number,
    authorityId:{
        type:mongoose.Types.ObjectId,
        ref:'authority',
        default:null
    },
    router:{
        type:String,
        default:null
    }
})

const authenticationModel=mongoose.model('authentication',authenticationSchema,'authentication')
const operationModel=mongoose.model('operation',operationSchema,'operation')
const LoginModel = mongoose.model('login', LoginSchema, 'login')
const StandingModel = mongoose.model('standing', standingSchema, 'standing')
const AuthorityModel = mongoose.model('authority', authoritySchema, 'authority')
// 创建用户模型
const BuyerSchema = new mongoose.Schema({
  // 用户唯一标识,在创建时获取到数组的长度+1       》number
  buyer_id: Number,
  //当前地理位置（经纬度坐标）                            》array
  buyer_location: Array,
  // 买家昵称                                                        》string
  buyer_nickname: String,
  // 买家姓名                                                             》string
  buyer_name: String,
  //买家手机号直接默认值
  buyer_phone: {
    type: String,
    default: '13888888888'
  },
  //当前设备标识默认为ios
  buyer_device: {
    type: String,
    default: 'ios'
  },
  //收获地址,直接默认值,
  buyer_harvest_address: {
    type: String,
    default: "大马猴牛马村666号"
  }
})
// 创建店铺商家模型
const BusinessSchem = new mongoose.Schema({
  //商家唯一标识,在创建时获取到数组的长度+1       》number
  store_id: Number,
  // 商家地理位置（经纬度坐标）                               》array
  store_location: Array,
  // 店铺名称                                                             》string
  store_name: String,
  //  商家手机号 
  store_phone: {
    type: String,
    default: '13888988888'
  },
  //所在地区，直接添加默认值
  store_area: {
    type: String,
    default: "广东 深圳 龙华"
  },
  //直接详细地址默认值
  store_address: {
    type: String,
    default: "民治街道第九区308栋1楼"
  },
  //取餐号码，直接默认值
  store_pickup_number: {
    type: String,
    default: "#013"
  }
})
// 创建骑手信息模型
const DeliverySchem = new mongoose.Schema({
  // 骑手唯一标识,在创建时获取到数组的长度+1 
  rider_id: Number,
  // 骑手姓名
  rider_name: String,
  //改派次数，不能超过两次，默认为0
  rider_reassignments: {
    type: Number,
    default: 0
  },
  // 骑手手机号
  rider_phone: {
    type: String,
    default: '13888808888'
  },
  // 当前地理位置（经纬度坐标）
  rider_currentLocation: Array,
  // 当前处理中的订单列表（数组形式）,可用于判断是否爆单
  rider_currentOrders: Array,
  //外卖员状态，默认值为空闲，李晶博数据字段用
  rider_status: {
    type: String,
    default: '空闲状态'
  }
})

// 创建订单模型
const OrderSchema = new mongoose.Schema({
  // 默认直接使用_id为订单编号====直接略过
  // 订单唯一标识，在创建时获取到数组的长度+1
  order_id: Number,
  // 下单用户的ID
  buyer_id: Number,
  // 接受订单的商家ID
  store_id: Number,
  // 接单骑手id，默认为null
  rider_id: {
    type: Number,
    default: null
  },
  // 订单配送方式，默认为0，平台转送
  order_delivery_method: {
    type: Number,
    default: 0
  },
  //外卖员接单时间,默认为空，等接单时传递过来参数
  order_accept_time: {
    type: Date,
    default: null
  },
  // 预计送达时间，默认为null，根据外卖员接收订单创建这个字段数据时，通过前端地图计算的时间进行添加。
  order_expected_delivery: {
    type: Date,
    default: null
  },
  // 订单创建时间
  order_create_time: {
    type: Date,
    default: Date.now()
  },
  //订单成交时间，默认为null
  order_transaction_time: {
    type: Date,
    default: null
  },
  //订单完成时间，默认为null
  order_completed: {
    type: Date,
    default: null
  },
  //餐具数量，直接默认为4
  order_tablewares: {
    type: Number,
    default: 4
  },
  //订单备注，直接写默认值
  order_notes: {
    type: String,
    default: "来几双手套"
  },
  // 订单调度，默认为false，如果是系统派单，将值改为true
  order_scheduling: {
    type: Boolean,
    default: false
  },
  //指派状态    =====》李晶博需要使用的字段    布尔值，
  // 默认为false，不是待指派订单，改为true，变为待指派订单
  order_assignment_status: {
    type: Boolean,
    default: false
  },
  // 订单拒绝次数，默认为0，当值为2时交由商家自行配送，根据商家配送状态来进行更改订单状态
  order_rejection_frequency: {
    type: Number,
    default: 0
  },
  // 记录订单拒绝第2次时的时间，判断商家自己是否进行接单，当超过n分钟之后订单自动取消，删除订单
  order_ju_time: {
    type: Date,
    default: null
  },
  // 配送动态数组字段，默认为 顾客提交订单，订单创建时间，预计送达时间；支付成功，订单支付成功状态，支付时间
  order_delivery_dynamics: {
    type: Array,
    default: []
  },
  // 正常配送状态，number值，默认为1
  order_delivery_status: {
    type: Number,
    default: 1
  },
  // 配送异常状态（order_exception_status）,默认为0
  order_exception_status: {
    type: Number,
    default: 0
  },
  // **售后异常状态 (order_sales_status)**默认为null
  order_sales_status: {
    type: Number,
    default: null
  },
  //订单交易状态，默认为6
  order_transaction_status: {
    type: Number,
    default: 6
  },
  //退款状态，1，处理中，2，拒绝退款，3，退款成功，4，退款关闭，默认值0
  order_refund_status: {
    type: Number,
    default: 0
  },
  //申请退款的原因，默认为null
  order_refund_reason: {
    type: String,
    default: null
  },
  //指派订单页面的的订单的状态显示===》李晶博    number值
  // 默认值为1，待抢单，2待指派、3待接单
  order_pendingorders: {
    type: Number,
    default: 1
  },
  // 取餐地点直接从商家表查询
  order_pickupLocation: String,
  // 配送目的地 直接从用户表查询
  order_deliveryLocation: String,
  // 订单评价内容字段，直接使用array来进行存储
  order_evaluation: {
    type: Array,
    default: []
  },
  // 商品列表字段，来存储当前订单的商品列表
  order_product_list: Array,
  //本订单的商品总价
  order_total_price: Number,
  // 开始写发票字段=====
  //发票类别，直接默认纸质
  order_Invoice_type: {
    type: String,
    default: '纸质'
  },
  //开具发票，默认值为在线开票
  order_Invoice_method: {
    type: String,
    default: '在线开票'
  },
  //发票内容，默认值，餐饮服务
  order_Invoice_content: {
    type: String,
    default: '餐饮服务'
  },
  //发票抬头，默认值xxxx有限公司
  order_Invoice_header: {
    type: String,
    default: 'xxxx有限公司'
  },
  //企业税号,默认值12345678
  order_enterprise_number: {
    type: String,
    default: '12345678'
  },
  //协商历史字段，数组存储,如果有协商记录进行添加
  order_negotiation_history: {
    type: Array,
    default: []
  },
  //纠纷处理字段
  order_dispute_resolution: {
    type: Array,
    default: []
  }
})
// 创建商品模型
const ProductSchema = new mongoose.Schema({
  // 商品ID，直接使用_id
  // 商品名称，
  goodsname: String,
  // 商品规格
  size: {
    type: String,
    default: '七寸'
  },
  // 商品辣度
  spicy: {
    type: String,
    default: '微辣'
  },
  // 商品单价
  price: Number,
  // 商品原价	
  oldprice: Number,
  // 商品数量
  num: Number,
  // 打包费用
  packaging_fee: Number,
  // 配送费用
  distribution_costs: Number,
  // 配送减免 
  discounts_reductions: Number,
  // 优惠价格 描述
  preferential_price: {
    type: String,
    default: '满100减5(平台承担  ￥2.00  商家承担  ￥3.00)'
  },
  //商品所属商家ID
  business_id: Number,
})



const manageListModel = mongoose.model(
  "manageList",
  ManageListSchema,
  "manageList"
);
const BusinessModel = mongoose.model('business', BusinessSchem, 'business')
const DeliveryModel = mongoose.model('delivery', DeliverySchem, 'delivery')
const BuyerModel = mongoose.model('buyer', BuyerSchema, 'buyer')
const OrderModel = mongoose.model('order', OrderSchema, 'order')
const ProductModel = mongoose.model('product', ProductSchema, 'product')
module.exports = {
  manageListModel, BusinessModel, DeliveryModel, BuyerModel, OrderModel, ProductModel,LoginModel,
  authenticationModel,
  operationModel,
  StandingModel,
  AuthorityModel
};
